// main.js
const { app, BrowserWindow, Tray, Menu } = require("electron");
const path = require("path");
const { fork } = require("child_process");

let mainWindow;
let nodeServer;
let tray;
let isQuitting = false;

function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
    },
  });

  // 启动 Node.js 服务
  startNodeServer();

  // ✅ 加载前端页面（开发或打包）
  if (!app.isPackaged) {
    mainWindow.loadURL("http://localhost:8000");
  } else {
    const indexPath = path.join(__dirname, "web", "index.html");
    mainWindow.loadFile(indexPath);
  }

  // 开发工具（可选）
  // mainWindow.webContents.openDevTools();

  // 监听窗口关闭事件，阻止默认退出行为
  mainWindow.on('close', (event) => {
    if (isQuitting) {
      mainWindow = null;
    } else {
      event.preventDefault();
      mainWindow.hide();
    }
  });
}

function createTray() {
  const iconPath = path.join(__dirname,'assets', 'logo.png');
  tray = new Tray(iconPath);

  const contextMenu = Menu.buildFromTemplate([
    {
      label: '显示应用',
      click: () => {
        mainWindow.show();
      }
    },
    {
      label: '退出应用',
      click: () => {
        isQuitting = true;
        app.quit();
      }
    }
  ]);

  tray.setToolTip('frp 客户端');
  tray.setContextMenu(contextMenu);

  tray.on('click', () => {
    mainWindow.show();
  });
}


function getServerPath() {
  if (app.isPackaged) {
    // 生产环境：从解压后的资源目录获取
    return path.join(process.resourcesPath, 'server.bundle.js');
  } else {
    // 开发环境：直接从项目目录获取
    return path.join(__dirname, 'index.js');
  }
}

function startNodeServer() {
  // 使用 fork 启动 index.js 作为子进程
  nodeServer = fork(getServerPath());
  // 监听子进程错误
  nodeServer.on("error", (err) => {
    console.error("Node server error:", err);
  });

  // 监听子进程退出
  nodeServer.on("exit", (code) => {
    if (code !== 0) {
      console.error(`Node server exited with code ${code}`);
    }
  });

  console.log("Node server started");
}

app.whenReady().then(() => {
  createWindow();
  createTray();
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    // app.quit();
  }
});

app.on("quit", () => {
  // 关闭应用时终止 Node.js 服务
  if (nodeServer) {
    nodeServer.kill();
    nodeServer = null;
    console.log("Node server stopped");
  }
});

app.on("activate", () => {
  if (mainWindow === null) {
    createWindow();
  }
});
